﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 28/04/2014
 * Time: 07:03 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace Gestión_UTN.util
{
	/// <summary>
	/// Description of Validador.
	/// </summary>
	public class Validador
	{
		 /// <summary>
        /// Valida si es un nombre
        /// </summary>
        /// <param name="control">Determina el text a validar</param>
        /// <returns>Devuelve true si es valido o false si no</returns>
        public static bool es_nombre(Control control)
        {
            Regex regex = new Regex(@"^[a-zA-Z áéíóúAÉÍÓÚÑñ]+$");
          return regex.IsMatch(control.Text);
        }

        /// <summary>
        /// Valida si es un número
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si es válido o false si no</returns>
        public static bool es_numero(Control control)
        {
            Regex regex = new Regex(@"^[0-9]+$");
            return regex.IsMatch(control.Text);
        }

        /// <summary>
        /// Valida si es una cadena de texto
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si es válido o false si no</returns>
        public static bool es_cadena(Control control)
        {
 
            Regex regex = new Regex(@"^[^ ][a-zA-Z ]+[^ ]$");
            return regex.IsMatch(control.Text);
 
        }

        /// <summary>
        /// Valida si es una dirección
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si es válido o false si no</returns>
        public static bool es_direccion(Control control)
        {

            Regex regex = new Regex(@"^.*(?=.*[0-9])(?=.*[a-zA-ZñÑ\s]).*$");
            return regex.IsMatch(control.Text);

        }

        /// <summary>
        /// Valida si es un teléfono
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si es válido o false si no</returns>
        public static bool es_telefono(Control control)
        {
            /*String re1 = ".*?";
            String re2 = "(\\d+)";
            String re3 = "([-+]\\d+)";
            String re4 = "([-+]\\d+)";
            String re5 = "([-+]\\d+)";*/

            Regex regex = new Regex(@"0{0,2}([\+]?[\d]{1,3} ?)?([\(]([\d]{2,3})[)] ?)?[0-9][0-9 \-]{6,}( ?([xX]|([eE]xt[\.]?)) ?([\d]{1,5}))?",RegexOptions.IgnoreCase|RegexOptions.Singleline);
            return regex.IsMatch(control.Text);
 
        }

        /// <summary>
        /// Valida el código de factura
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si es válido o false si no</returns>
        public static bool es_factura(Control control)
        {
            string re1 = "(\\d+)";
            string re2 = "(-)";
            string re3 = "(\\d+)";
            string re4 = "(\\/)";
            string re5 = "(\\d+)";

            Regex regex = new Regex(re1 + re2 + re3 + re4 + re5, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            return regex.IsMatch(control.Text);
        }

        /// <summary>
        /// Valida si es un número decimal
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si es válido o false si no</returns>
        public static bool es_decimal(Control control)
        {
 
            Regex regex = new Regex(@"^[0-9]{1,9}([\.\,][0-9]{1,3})?$");
            return regex.IsMatch(control.Text);
 
        }

        /// <summary>
        /// Valida una url
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si es válido o false si no</returns>
        public static bool es_url(Control control)
        {
 
            Regex regex = new Regex(@"^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$");
            return regex.IsMatch(control.Text);
        }

        /// <summary>
        /// Valida un email
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si es válido o false si no</returns>
        public static bool es_email(Control control)
        {
 
            Regex regex = new Regex(@"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$");

            return regex.IsMatch(control.Text);
 
        }

        /// <summary>
        /// Valida una contraseña
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si es válido o false si no</returns>
        public static bool es_password(Control control)
        {

            Regex regex = new Regex(@"(?!^´[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$");

            return regex.IsMatch(control.Text);

        }
        
        /// <summary>
        /// Valida una fecha
        /// </summary>
        /// <param name="control">Determina el texto a validar</param>
        /// <returns>Devuelve true si fue válido o false si no</returns>
        public static bool es_fecha(Control control)
        {

        	string re1="((?:(?:[0-2]?\\d{1})|(?:[3][01]{1}))[-:\\/.](?:[0]?[1-9]|[1][012])[-:\\/.](?:(?:[1]{1}\\d{1}\\d{1}\\d{1})|(?:[2]{1}\\d{3})))(?![\\d])";
        	
            Regex regex = new Regex(re1);

            return regex.IsMatch(control.Text);

        }
	}
}
